ARIAã©ã€ããªãŒãžã§ã³ããã¹ã¿ãŒããåçã³ã³ãã³ãã®ãŠã§ãã¢ã¯ã»ã·ããªãã£ã匷åããŸããããpoliteããã³assertiveãªéç¥ã®å®è£ æ¹æ³ããã¹ããã©ã¯ãã£ã¹ããããŠèœãšã穎ãåŠã³ãã°ããŒãã«ã§å æ¬çãªãŠãŒã¶ãŒäœéšãå®çŸããŸãã
ã©ã€ããªãŒãžã§ã³ïŒã°ããŒãã«ãªã¢ã¯ã»ã·ããªãã£ã®ããã®åçã³ã³ãã³ãéç¥ã®ç¿åŸ
çžäºæ¥ç¶ãããããžã¿ã«äžçã«ãããŠããŠã§ãã¢ããªã±ãŒã·ã§ã³ã¯ãã¯ãéçãªããŒãžã§ã¯ãããŸããããããã¯ãªã¢ã«ã¿ã€ã ã§æŽæ°ããããŠãŒã¶ãŒã®å ¥åã«åå¿ããæ°ããæ å ±ãã·ãŒã ã¬ã¹ã«ååŸãããåçã§ã€ã³ã¿ã©ã¯ãã£ããªç°å¢ã§ãããã®ãã€ãããºã ã¯å€ãã®ãŠãŒã¶ãŒã«ãšã£ãŠäœéšãè±ãã«ããŸãããã¹ã¯ãªãŒã³ãªãŒããŒãªã©ã®æ¯æŽæè¡ã«é Œã人ã ã«ãšã£ãŠã¯ããã°ãã°é倧ãªéå£ãšãªããŸããã·ã§ããã³ã°ã«ãŒãã®åèšéé¡ãæŽæ°ãããããã¡ãŒã«éç¥ããããã¢ãããããããã©ãŒã ããªã¢ã«ã¿ã€ã ã§å ¥åæ€èšŒãè¡ã£ããããå Žé¢ãæ³åããŠã¿ãŠãã ãããã¹ã¯ãªãŒã³ãªãŒããŒã®ãŠãŒã¶ãŒã«ãšã£ãŠããããã®éèŠãªå€æŽã¯æ°ã¥ãããã«éãå»ãããã©ã¹ãã¬ãŒã·ã§ã³ããšã©ãŒããããã¯ã¿ã¹ã¯ãå®äºã§ããªãåå ãšãªãåŸãŸãã
ãŸãã«ããã§ARIAã©ã€ããªãŒãžã§ã³ãäžå¯æ¬ ãšãªããŸããã©ã€ããªãŒãžã§ã³ã¯ãåçãªãŠã§ãã³ã³ãã³ããšæ¯æŽæè¡ãšã®éã®ã®ã£ãããåããããã«èšèšãããã匷åãªWAI-ARIAïŒWeb Accessibility Initiative - Accessible Rich Internet ApplicationsïŒä»æ§ã§ããããã«ããããŠã§ãéçºè ã¯ããŒãžäžã®ã³ã³ãã³ãã®å€æŽã«ã€ããŠã¹ã¯ãªãŒã³ãªãŒããŒã«æç€ºçã«éç¥ããã¡ã«ããºã ãæäŸã§ãããŠãŒã¶ãŒãæåã§ããŒãžãæŽæ°ãããããã²ãŒããããããããšãªããã¿ã€ã ãªãŒã§é¢é£æ§ã®é«ãéç¥ãåãåããããã«ãªããŸãã
ã°ããŒãã«ãªãªãŒãã£ãšã³ã¹ã«ãšã£ãŠãã©ã€ããªãŒãžã§ã³ã®éèŠæ§ã¯åãªãæè¡çãªå®è£ ãè¶ ããŠããŸããããã¯ããžã¿ã«ã€ã³ã¯ã«ãŒãžã§ã³ã®ååãäœçŸãã倿§ãªèæ¯ãèœåãå°åã®äººã ããŠã§ãã³ã³ãã³ãã«çããã¢ã¯ã»ã¹ãã察話ã§ããããšãä¿èšŒããŸããæ±äº¬ã§ã¹ã¯ãªãŒã³ãªãŒããŒã䜿ã£ãŠãã人ãããã«ãªã³ã§ç¹åãã£ã¹ãã¬ã€ã䜿ã£ãŠãã人ããããŽã¿ã§é³å£°å ¥åã§ããã²ãŒãããŠãã人ããé©åã«å®è£ ãããã©ã€ããªãŒãžã§ã³ã¯äžè²«æ§ã®ããå ¬å¹³ãªäœéšãä¿èšŒããŸãã
åçãªãŠã§ãïŒåŸæ¥ã®ã¢ã¯ã»ã·ããªãã£ãžã®ææŠ
æŽå²çã«ããŠã§ãã³ã³ãã³ãã¯å€§éšåãéçã§ãããããŒãžãèªã¿èŸŒãŸãããšããã®ã³ã³ãã³ãã¯åºå®ããããŸãŸã§ãããã¹ã¯ãªãŒã³ãªãŒããŒã¯ããã®éçãªDOMïŒDocument Object ModelïŒãè§£éããçŽç·çã«æç€ºããããã«èšèšãããŠããŸãããããããJavaScriptãã¬ãŒã ã¯ãŒã¯ãAPIã«ãã£ãŠæšé²ãããçŸä»£ã®ãŠã§ãéçºã¯ããã©ãã€ã ã·ããããããããŸããïŒ
- ã·ã³ã°ã«ããŒãžã¢ããªã±ãŒã·ã§ã³ïŒSPAïŒïŒããŒãžå šäœãåèªã¿èŸŒã¿ãããããšã¯ãªããªããã³ã³ãã³ãã¯åããã¥ãŒå ã§æŽæ°ãããŸããã»ã¯ã·ã§ã³éãç§»åããããæ°ããããŒã¿ãèªã¿èŸŒãã ãããŠããããŒãžã®ç¹å®ã®éšåã ãã倿ŽãããããšããããããŸãã
- ãªã¢ã«ã¿ã€ã æŽæ°ïŒãã£ããã¢ããªã±ãŒã·ã§ã³ãæ ªäŸ¡è¡šç€ºããã¥ãŒã¹ãã£ãŒããéç¥ã·ã¹ãã ãªã©ãããŠãŒã¶ãŒã®æäœãªãã«åžžã«æ°ããæ å ±ãããã·ã¥ããŸãã
- ã€ã³ã¿ã©ã¯ãã£ããªèŠçŽ ïŒå³ææ€èšŒæ©èœä»ãã®ãã©ãŒã ã鲿ã€ã³ãžã±ãŒã¿ãŒãæ€çŽ¢åè£ããã£ã«ã¿ãªã³ã°ããããªã¹ããªã©ãããŠãŒã¶ãŒã®æäœã«å¿ããŠDOMã倿ŽããŸãã
ãããã®å€æŽãç¥ãããã¡ã«ããºã ããªããã°ãã¹ã¯ãªãŒã³ãªãŒããŒã¯ãã°ãã°ããã«æ°ã¥ããŸããããŠãŒã¶ãŒããã©ãŒã ãå ¥åããéä¿¡ãã¿ã³ãã¯ãªãã¯ãããšãã«ãèŠèŠçã«ã¯ãšã©ãŒã¡ãã»ãŒãžã衚瀺ãããŠãããããèªã¿äžããããããšã¯ãªãããŠãŒã¶ãŒã¯æ··ä¹±ããŠå ã«é²ããªããªããŸãããããã¯ãå ±åäœæ¥ããŒã«ã§éèŠãªãã£ããã¡ãã»ãŒãžãèŠéããããããŸããããã®ãéããªå€±æãã¯ã壿ªãªãŠãŒã¶ãŒäœéšã«ã€ãªãããæ ¹æ¬çã«ã¢ã¯ã»ã·ããªãã£ãæãªããŸãã
ARIAã©ã€ããªãŒãžã§ã³ã®ç޹ä»ïŒãã®è§£æ±ºç
ARIAã©ã€ããªãŒãžã§ã³ã¯ãéçºè ããŠã§ãããŒãžäžã®ç¹å®ã®é åããã©ã€ãããšããŠæå®ã§ããããã«ããããšã§ããã®èª²é¡ã«å¯ŸåŠããŸãããããã®æå®ãããé åå ã®ã³ã³ãã³ãã倿Žããããšãæ¯æŽæè¡ã¯ãããã®å€æŽãç£èŠãããŠãŒã¶ãŒã«éç¥ããããã«æç€ºãããŸããããã¯èªåçã«è¡ããããŠãŒã¶ãŒãæŽæ°ãããã³ã³ãã³ãã«æåã§ãã©ãŒã«ã¹ãåãããå¿ èŠã¯ãããŸããã
äžæ žãšãªã屿§ïŒaria-live
ã©ã€ããªãŒãžã§ã³ãå®çŸ©ããããã«äœ¿çšãããäž»èŠãªå±æ§ã¯aria-live
ã§ããããã«ã¯3ã€ã®å€ã®ãããããèšå®ã§ããéç¥ã®ç·æ¥åºŠãšå²ã蟌ã¿ã¬ãã«ã決å®ããŸãïŒ
1. aria-live="polite"
ããã¯æãäžè¬çã«äœ¿çšãããéåžžæšå¥šãããå€ã§ããèŠçŽ ã«`aria-live="polite"`ãé©çšããããšãã¹ã¯ãªãŒã³ãªãŒããŒã¯ãŠãŒã¶ãŒãã¢ã€ãã«ç¶æ ã«ãªã£ããšããçŸåšã®ã¿ã¹ã¯ãäžæåæ¢ãããšãã«ããã®ã³ã³ãã³ãã®å€æŽãéç¥ããŸãããŠãŒã¶ãŒã®çŸåšã®èªã¿äžããæäœãäžæããããšã¯ãããŸãããããã¯ãéèŠã§ã¯ãªãæ å ±æäŸçãªæŽæ°ã«æé©ã§ãã
aria-live="polite"
ã®ãŠãŒã¹ã±ãŒã¹ïŒ
- ã·ã§ããã³ã°ã«ãŒãã®æŽæ°ïŒã¢ã€ãã ãã«ãŒãã«è¿œå ãŸãã¯åé€ãããåèšéé¡ãæŽæ°ããããšãããŠãŒã¶ãŒãå³åº§ã«äžæãããå¿ èŠã¯ãªããçŸåšã®æäœãçµããåŸã«æŽæ°ãèãããŸãã
- 鲿ã€ã³ãžã±ãŒã¿ãŒïŒãã¡ã€ã«ã¢ããããŒãã®ç¶æ³ãããŠã³ããŒãã®ããã°ã¬ã¹ããŒããŸãã¯ããŒãã£ã³ã°ã¹ãããŒããŠãŒã¶ãŒã¯ããã¯ã°ã©ãŠã³ãããã»ã¹ã®æ å ±ãåŸãªãããããŒãžã®ä»ã®éšåãšå¯Ÿè©±ãç¶ããããšãã§ããŸãã
- æ€çŽ¢çµæã®ä»¶æ°ïŒã12ä»¶ã®çµæãèŠã€ãããŸããããããçµæã¯ãããŸãããã
- ãã¥ãŒã¹ãã£ãŒã/ã¢ã¯ãã£ããã£ã¹ããªãŒã ïŒãœãŒã·ã£ã«ã¡ãã£ã¢ã®ãã£ãŒããå ±åäœæ¥ããã¥ã¡ã³ãã®ã¢ã¯ãã£ããã£ãã°ã«æ°ããæçš¿ã衚瀺ããããšãã
- ãã©ãŒã ã®æåã¡ãã»ãŒãžïŒãè©³çŽ°ãæ£åžžã«ä¿åãããŸãããã
äŸïŒPoliteïŒïŒ
<div aria-live="polite" id="cart-status">ã«ãŒãã¯ç©ºã§ãã</div>
<!-- åŸã§JavaScriptã«ãã£ãŠã¢ã€ãã ã远å ããããšã -->
<script>
document.getElementById('cart-status').textContent = 'ã«ãŒãã«1åã®ã¢ã€ãã ããããŸããåèšïŒ$25.00';
</script>
ãã®äŸã§ã¯ãã¹ã¯ãªãŒã³ãªãŒããŒã¯ãŠãŒã¶ãŒãã¿ã€ãã³ã°ãããã²ãŒã·ã§ã³ãªã©ã®çŸåšã®æäœãçµããåŸããã«ãŒãã«1åã®ã¢ã€ãã ããããŸããåèšïŒ$25.00ããšäžå¯§ã«éç¥ããŸãã
2. aria-live="assertive"
ãã®å€ã¯ãç·æ¥ãã€éèŠãªå€æŽã瀺ããŸãã`aria-live="assertive"`ã䜿çšããããšãã¹ã¯ãªãŒã³ãªãŒããŒã¯ãŠãŒã¶ãŒã®çŸåšã®ã¿ã¹ã¯ãèªã¿äžããäžæããŠãæ°ããã³ã³ãã³ããå³åº§ã«äŒããŸããããã¯ã絶察çã«å³æã®æ³šæãå¿ èŠãªæ å ±ã«ã®ã¿ãæ§ããã«äœ¿çšãã¹ãã§ãã
aria-live="assertive"
ã®ãŠãŒã¹ã±ãŒã¹ïŒ
- ãšã©ãŒã¡ãã»ãŒãžïŒãç¡å¹ãªãã¹ã¯ãŒãã§ããããäžåºŠã詊ããã ãããããããã®ãã£ãŒã«ãã¯å¿ é ã§ããããããã®ãšã©ãŒã¯ãŠãŒã¶ãŒãå ã«é²ãã®ã劚ãããããå³æã®æ³šæãå¿ èŠã§ãã
- é倧ãªã·ã¹ãã ã¢ã©ãŒãïŒãã»ãã·ã§ã³ã®æå¹æéããŸããªãåããŸããããããããã¯ãŒã¯æ¥ç¶ã倱ãããŸãããã
- æéçå¶çŽã®ããéç¥ïŒãªã³ã©ã€ã³ãã³ãã³ã°ã¢ããªã±ãŒã·ã§ã³ã§ã®é倧ãªèŠåãç·æ¥æŸéã
äŸïŒAssertiveïŒïŒ
<div aria-live="assertive" id="error-message" style="color: red;"></div>
<!-- åŸã§ãã©ãŒã ã®æ€èšŒã倱æãããšã -->
<script>
document.getElementById('error-message').textContent = 'æå¹ãªã¡ãŒã«ã¢ãã¬ã¹ãå
¥åããŠãã ããã';
</script>
ããã§ãã¹ã¯ãªãŒã³ãªãŒããŒã¯è¡ã£ãŠããããšãå³åº§ã«äžæãããæå¹ãªã¡ãŒã«ã¢ãã¬ã¹ãå ¥åããŠãã ãããããšéç¥ããŸããããã«ããããŠãŒã¶ãŒã¯åé¡ã«ããã«æ°ã¥ãããšãã§ããŸãã
3. aria-live="off"
ããã¯ãã©ã€ããªãŒãžã§ã³ãšããŠæå®ãããŠããªãèŠçŽ ã®ããã©ã«ãå€ã§ãããã®èŠçŽ å ã®ã³ã³ãã³ããžã®å€æŽã¯ãæç€ºçã«ãã©ãŒã«ã¹ãç§»åãããªãéããã¹ã¯ãªãŒã³ãªãŒããŒã«ãã£ãŠéç¥ãããªãããšãæå³ããŸãã`aria-live="off"`ãæç€ºçã«èšå®ããå¿ èŠã¯ã»ãšãã©ãããŸãããïŒããã©ã«ãã§ããããïŒãç¹å®ã®ã·ããªãªã§ç¶æ¿ãããã©ã€ããªãŒãžã§ã³ã®èšå®ãäžæžãããããã³ã³ãã³ãã®äžéšã«å¯Ÿããéç¥ãäžæçã«ç¡å¹ã«ãããããã®ã«åœ¹ç«ã¡ãŸãã
ã©ã€ããªãŒãžã§ã³ã®ããŒã«å±æ§
`aria-live`以å€ã«ããARIAã¯ç¹å®ã®`role`屿§ãæäŸããŠããããããã¯æé»çã«`aria-live`ãä»ã®ããããã£ãèšå®ããã»ãã³ãã£ãã¯ãªæå³ãæäŸããå€ãã®å Žåãããè¯ãã¯ãã¹ãã©ãŠã¶/ã¹ã¯ãªãŒã³ãªãŒããŒã®ãµããŒããæäŸããŸããé©çšå¯èœãªå Žåã¯ããããã®ããŒã«ã䜿çšããããšãäžè¬çã«æšå¥šãããŸãã
1. role="status"
status
ã©ã€ããªãŒãžã§ã³ã¯ãæé»çã«`aria-live="polite"`ããã³`aria-atomic="true"`ã§ããããã¯ãéèŠã§ã¯ãªãéã€ã³ã¿ã©ã¯ãã£ããªã¹ããŒã¿ã¹ã¡ãã»ãŒãžã®ããã«èšèšãããŠããŸãã倿ŽããããšããªãŒãžã§ã³å
šäœã®ã³ã³ãã³ããéç¥ãããŸãã
ãŠãŒã¹ã±ãŒã¹ïŒ
- 確èªã¡ãã»ãŒãžïŒãã¢ã€ãã ãã«ãŒãã«è¿œå ãããŸããããããèšå®ãä¿åãããŸãããã
- éåææäœã®é²æïŒãããŒã¿ãèªã¿èŸŒãã§ããŸã...ãïŒãã ãã鲿ã«ã¯`role="progressbar"`ã®æ¹ãããå ·äœçãããããŸããïŒã
- æ€çŽ¢çµæã«é¢ããæ å ±ïŒã100ä»¶äž1ïœ10ä»¶ã衚瀺ããŠããŸããã
äŸïŒ
<div role="status" id="confirmation-message"></div>
<!-- ãã©ãŒã éä¿¡ãæåããåŸ -->
<script>
document.getElementById('confirmation-message').textContent = 'ãæ³šæã¯æ£åžžã«å®äºããŸããïŒ';
</script>
2. role="alert"
alert
ã©ã€ããªãŒãžã§ã³ã¯ãæé»çã«`aria-live="assertive"`ããã³`aria-atomic="true"`ã§ããããã¯ããŠãŒã¶ãŒã®å³æã®æ³šæãå¿
èŠãšãããéèŠã§æéçå¶çŽã®ããããããŠãã°ãã°é倧ãªã¡ãã»ãŒãžã®ããã®ãã®ã§ããå®éã®ã¢ã©ãŒã ã®ããã«ããŠãŒã¶ãŒãäžæãããŸãã
ãŠãŒã¹ã±ãŒã¹ïŒ
- æ€èšŒãšã©ãŒïŒããŠãŒã¶ãŒåã¯æ¢ã«äœ¿çšãããŠããŸããããããã¹ã¯ãŒããçãããŸããã
- ã·ã¹ãã ã¯ãªãã£ã«ã«ãªèŠåïŒããã£ã¹ã¯å®¹éãå°ãªããªã£ãŠããŸãããããæ¯æãã倱æããŸãããã
- ã»ãã·ã§ã³ã¿ã€ã ã¢ãŠãïŒãã»ãã·ã§ã³ã¯60ç§åŸã«æéåãã«ãªããŸããã
äŸïŒ
<div role="alert" id="form-error" style="color: red;"></div>
<!-- å¿
é ãã£ãŒã«ãã空ã®ãŸãŸã ã£ããšã -->
<script>
document.getElementById('form-error').textContent = 'ãã¹ãŠã®å¿
é ãã£ãŒã«ããå
¥åããŠãã ããã';
</script>
3. role="log"
log
ã©ã€ããªãŒãžã§ã³ã¯ãæé»çã«`aria-live="polite"`ããã³`aria-relevant="additions"`ã§ããããã¯ããã£ããå±¥æŽãã€ãã³ããã°ãªã©ãæç³»åã®ãã°ã«è¿œå ãããã¡ãã»ãŒãžã®ããã«èšèšãããŠããŸããæ°ãããšã³ããªã¯ãŠãŒã¶ãŒã®ãããŒãäžæããããšãªãéç¥ãããéåžžã以åã®ãšã³ããªã®ã³ã³ããã¹ãã¯ç¶æãããŸãã
ãŠãŒã¹ã±ãŒã¹ïŒ
- æ°ããã¡ãã»ãŒãžã衚瀺ããããã£ãããŠã£ã³ããŠã
- æè¿ã®ãŠãŒã¶ãŒã¢ã¯ã·ã§ã³ã衚瀺ããã¢ã¯ãã£ããã£ãã£ãŒãã
- ã·ã¹ãã ã³ã³ãœãŒã«ã®åºåããããã°ãã°ã
äŸïŒ
<div role="log" id="chat-window" style="height: 200px; overflow-y: scroll; border: 1px solid #ccc; padding: 10px;">
<p><strong>ãŠãŒã¶ãŒAïŒ</strong> ã¿ãªãããããã«ã¡ã¯ïŒ</p>
</div>
<!-- æ°ããã¡ãã»ãŒãžãå±ãããšã -->
<script>
const chatWindow = document.getElementById('chat-window');
const newMessage = document.createElement('p');
newMessage.innerHTML = '<strong>ãŠãŒã¶ãŒBïŒ</strong> ããã«ã¡ã¯ããŠãŒã¶ãŒAããïŒ';
chatWindow.appendChild(newMessage);
chatWindow.scrollTop = chatWindow.scrollHeight; // æ°ããã¡ãã»ãŒãžãŸã§ã¹ã¯ããŒã«
</script>
ã¹ã¯ãªãŒã³ãªãŒããŒã¯ããã£ããå±¥æŽå šäœãå床èªã¿äžããããšãªããæ°ããã¡ãã»ãŒãžã衚瀺ããããšããŠãŒã¶ãŒBïŒããã«ã¡ã¯ããŠãŒã¶ãŒAããïŒããšéç¥ããŸãã
4. role="marquee"
æé»çã«`aria-live="off"`ã§ãããã®ããŒã«ã¯ãé »ç¹ã«æŽæ°ãããããŠãŒã¶ãŒãäžæãããã»ã©éèŠã§ã¯ãªãã³ã³ãã³ãã瀺ããŸããæ ªäŸ¡è¡šç€ºãã¹ã¯ããŒã«ãããã¥ãŒã¹ã®èŠåºããèããŠã¿ãŠãã ããããã®åŠšå®³çãªæ§è³ªãšããã°ãã°ã¢ã¯ã»ã·ããªãã£ã«æ¬ ããã¹ã¯ããŒã«ã®ããã`role="marquee"`ã¯ãäžæåæ¢/åçã³ã³ãããŒã«ãæ éã«å®è£ ããªãéããã¢ã¯ã»ã·ããªãã£ç®çã§ã®äœ¿çšã¯äžè¬çã«æšå¥šãããŸããã
5. role="timer"
ããã©ã«ãã§ã¯æé»çã«`aria-live="off"`ã§ãããã¿ã€ããŒã®å€ãéèŠãªå Žåã¯ãæçšãªéç¥ã®ããã«`aria-live="polite"`ãèšå®ããããšãæšå¥šãããŸããããã¯ãã«ãŠã³ãããŠã³ã¯ããã¯ã®ããã«é »ç¹ã«æŽæ°ãããæ°å€ã«ãŠã³ã¿ãŒã瀺ããŸããéçºè ã¯ãã¿ã€ããŒãã©ããããã®é »åºŠã§å€æŽããããã¹ãŠã®å€æŽãéç¥ããããšãã©ãã»ã©éèŠããèæ ®ããå¿ èŠããããŸãã
ãŠãŒã¹ã±ãŒã¹ïŒ
- ã€ãã³ããŸã§ã®ã«ãŠã³ãããŠã³ã
- ãã¹ãã®æ®ãæéã
äŸïŒPoliteãªã¿ã€ããŒïŒïŒ
<div role="timer" aria-live="polite" id="countdown">æ®ãæéïŒ05:00</div>
<!-- 1ç§ããšã«æŽæ°ãã¹ã¯ãªãŒã³ãªãŒããŒã¯äžå¯§ãªééã§éç¥ -->
<script>
let seconds = 300;
setInterval(() => {
seconds--;
const minutes = Math.floor(seconds / 60);
const remainingSeconds = seconds % 60;
document.getElementById('countdown').textContent = `æ®ãæéïŒ${minutes}:${remainingSeconds.toString().padStart(2, '0')}`;
}, 1000);
</script>
ç²åºŠãšå¶åŸ¡ïŒaria-atomic
ãšaria-relevant
`aria-live`ãç·æ¥åºŠã決å®ããã®ã«å¯Ÿãã`aria-atomic`ãš`aria-relevant`ã¯ãã©ã€ããªãŒãžã§ã³å ã®ã©ã®ã³ã³ãã³ããå®éã«éç¥ããããããã现ããå¶åŸ¡ããŸãã
aria-atomic="true"
vs. false
(ããã©ã«ã)
ãã®å±æ§ã¯ãã¹ã¯ãªãŒã³ãªãŒããŒã«ã©ã€ããªãŒãžã§ã³å šäœã®ã³ã³ãã³ããéç¥ãããïŒatomic = trueïŒã倿Žãããç¹å®ã®éšåã®ã¿ãéç¥ãããïŒatomic = falseãããã©ã«ãã®åäœïŒãäŒããŸããããã©ã«ãå€ã¯`false`ã§ããã`role="status"`ãš`role="alert"`ã§ã¯æé»çã«`true`ã«ãªããŸãã
aria-atomic="true"
ïŒã©ã€ããªãŒãžã§ã³å ã®ã³ã³ãã³ãã倿Žããããšãã¹ã¯ãªãŒã³ãªãŒããŒã¯ãã®ãªãŒãžã§ã³å ã«çŸåšãããã¹ãŠã®ã³ã³ãã³ããéç¥ããŸããããã¯ãã»ãã®äžéšãã倿ŽãããªããŠããã¡ãã»ãŒãžå šäœã®ã³ã³ããã¹ããéèŠãªå Žåã«åœ¹ç«ã¡ãŸããaria-atomic="false"
ïŒã©ã€ããªãŒãžã§ã³å ã§æ°ãã远å ãŸãã¯å€æŽãããããã¹ãã®ã¿ãéç¥ãããŸããããã¯åé·æ§ãå°ãªããªããŸãããæ éã«ç®¡çããªããšã³ã³ããã¹ãã倱ãããå¯èœæ§ããããŸãã
äŸïŒaria-atomic
ïŒïŒ
ããã¹ãä»ãã®ããã°ã¬ã¹ããŒãèããŠã¿ãŸãããïŒ
<div aria-live="polite" aria-atomic="true" id="upload-status">ãã¡ã€ã«ãã¢ããããŒãäžïŒ<span>0%</span></div>
<!-- é²æãæŽæ°ãããã«ã€ã㊠-->
<script>
let progress = 0;
const statusDiv = document.getElementById('upload-status');
const progressSpan = statusDiv.querySelector('span');
const interval = setInterval(() => {
progress += 10;
progressSpan.textContent = `${progress}%`;
if (progress >= 100) {
clearInterval(interval);
statusDiv.textContent = 'ã¢ããããŒããå®äºããŸããã';
}
}, 1000);
</script>
`aria-atomic="true"`ã®å ŽåãããŒã»ã³ããŒãžãã0%ãããã10%ãã«å€ãããšãã¹ã¯ãªãŒã³ãªãŒããŒã¯ããã¡ã€ã«ãã¢ããããŒãäžïŒ10%ããšéç¥ããŸãããã`aria-atomic`ã`false`ïŒããã©ã«ãïŒã ã£ãããã10%ããšã ãéç¥ãããå¯èœæ§ããããããã§ã¯ã³ã³ããã¹ããæ¬ ããŠããŸããŸãã
aria-relevant
ïŒã©ã®å€æŽãéèŠããæå®ãã
ãã®å±æ§ã¯ãã©ã€ããªãŒãžã§ã³å ã®ã©ã®ã¿ã€ãã®å€æŽãéç¥ã®ã察象ããšèŠãªãããããå®çŸ©ããŸããã¹ããŒã¹ã§åºåããã1ã€ä»¥äžã®å€ãåããŸãïŒ
additions
ïŒã©ã€ããªãŒãžã§ã³ã«è¿œå ãããæ°ããããŒããéç¥ããŸããremovals
ïŒã©ã€ããªãŒãžã§ã³ããåé€ãããããŒããéç¥ããŸãïŒå€ãã®ã·ããªãªã§ã¯ããŸããµããŒããããŠããªãããæçšã§ã¯ãããŸããïŒãtext
ïŒã©ã€ããªãŒãžã§ã³å ã®æ¢åããŒãã®ããã¹ãã³ã³ãã³ãã®å€æŽãéç¥ããŸããall
ïŒäžèšã®ãã¹ãŠãéç¥ããŸãïŒadditions removals text
ãšåçïŒã
`aria-relevant`ã®ããã©ã«ãå€ã¯`text additions`ã§ãã`role="log"`ã®å Žåãããã©ã«ãã¯`additions`ã«ãªããŸãã
äŸïŒaria-relevant
ïŒïŒ
è€æ°ã®æ ªäŸ¡ã衚瀺ããæ ªäŸ¡è¡šç€ºãèããŠã¿ãŸããããæ°ããæ ªã远å ããããšãã ãéç¥ããæ¢åã®æ ªäŸ¡ã®å€æŽã¯éç¥ããããªãå ŽåïŒ
<div aria-live="polite" aria-relevant="additions" id="stock-ticker">
<p>AAPL: $150.00</p>
<p>GOOG: $2500.00</p>
</div>
<!-- æ°ããæ ªã远å ããããšã -->
<script>
const ticker = document.getElementById('stock-ticker');
const newStock = document.createElement('p');
newStock.textContent = 'MSFT: $300.00';
ticker.appendChild(newStock);
// æ¢åã®æ ªäŸ¡ã倿ŽãããŠããaria-relevant="additions" ã®ããéç¥ãããªã
// ticker.querySelector('p').textContent = 'AAPL: $150.50'; // ãã®å€æŽã¯éç¥ãããªã
</script>
ã©ã€ããªãŒãžã§ã³å®è£ ã®ãã¹ããã©ã¯ãã£ã¹
ã©ã€ããªãŒãžã§ã³ã®å¹æçãªå®è£ ã«ã¯ãåãªãæè¡çãªç¥èã ãã§ãªããææ ®æ·±ãæ€èšãå¿ èŠã§ãããããã®ãã¹ããã©ã¯ãã£ã¹ã«åŸãããšã§ãçã«å æ¬çãªäœéšãã°ããŒãã«ã«ä¿èšŒã§ããŸãïŒ
1. ã³ã³ãã³ãã¯ç°¡æœãã€æç¢ºã«
ã¹ã¯ãªãŒã³ãªãŒããŒã®ãŠãŒã¶ãŒã¯æ å ±ãé çªã«åŠçããŸããé·ããŠåé·ãªéç¥ã¯ãéªéã§ãã©ã¹ãã¬ãŒã·ã§ã³ã®åå ãšãªããŸãããŠãŒã¶ãŒã®æ¯åœèªãèªç¥çè² è·ã«é¢ããããçããèŠç¹ãæŒããããçè§£ããããã¡ãã»ãŒãžãäœæããŸããããå°éçšèªãè€éãªææ§é ã¯é¿ããŠãã ããã
2. éå°ãªéç¥ãé¿ãã
ãã¹ãŠã®åçãªå€æŽãã©ã€ããªãŒãžã§ã³ã«ããèªæã«æµæããŠãã ãããç¹ã«`aria-live="assertive"`ã®ä¹±çšã¯ãçµ¶ãéãªãéç¥ã®éäžç ²ç«ã«ã€ãªãããã¢ããªã±ãŒã·ã§ã³ã䜿çšäžèœã«ããå¯èœæ§ããããŸãããŠãŒã¶ãŒãçŸåšã®ç¶æ ãçè§£ããããã¿ã¹ã¯ãå®äºãããããèœåã«çŽæ¥åœ±é¿ãäžããéèŠãªæŽæ°ã«çŠç¹ãåœãŠãŠãã ããã
3. ã©ã€ããªãŒãžã§ã³ãæŠç¥çã«é 眮ãã
ã©ã€ããªãŒãžã§ã³èŠçŽ èªäœã¯ãããšã空ã§ãã£ãŠããæåã®ããŒãžèªã¿èŸŒã¿æããDOMã«ååšãããã¹ãã§ãã`aria-live`屿§ãã©ã€ããªãŒãžã§ã³èŠçŽ èªäœãåçã«è¿œå ãŸãã¯åé€ããããšã¯ãç°ãªãã¹ã¯ãªãŒã³ãªãŒããŒããã©ãŠã¶éã§ä¿¡é Œæ§ãäœãå ŽåããããŸããäžè¬çãªãã¿ãŒã³ã¯ãã³ã³ãã³ããåãåãæºåãã§ããŠãã`aria-live`屿§ãæã€ç©ºã®`div`ãçšæããããšã§ãã
4. ãã©ãŒã«ã¹ç®¡çã確å®ã«è¡ã
ã©ã€ããªãŒãžã§ã³ã¯å€æŽãéç¥ããŸãããèªåçã«ãã©ãŒã«ã¹ãç§»åãããããã§ã¯ãããŸãããåçã«è¡šç€ºãããã€ã³ã¿ã©ã¯ãã£ããªèŠçŽ ïŒäŸïŒã¢ã©ãŒãã¡ãã»ãŒãžã®ãéããããã¿ã³ãæ°ããèªã¿èŸŒãŸãããã©ãŒã ãã£ãŒã«ãïŒã«ã€ããŠã¯ããŠãŒã¶ãŒã广çã«ã¬ã€ãããããã«ãããã°ã©ã ã§ãã©ãŒã«ã¹ã管çããå¿ èŠããããããããŸããã
5. ã°ããŒãã«ãªåœ±é¿ãèæ ®ããïŒèšèªãšèªã¿äžãé床
- å€èšèªã³ã³ãã³ãïŒã¢ããªã±ãŒã·ã§ã³ãè€æ°ã®èšèªããµããŒãããŠããå Žåãã©ã€ããªãŒãžã§ã³å ã®ã³ã³ãã³ãããŠãŒã¶ãŒã®åªå èšèªã«æŽæ°ãããããã«ããŠãã ãããã¹ã¯ãªãŒã³ãªãŒããŒã¯ãçºé³ãšã³ãžã³ã決å®ããããã«`html`èŠçŽ ïŒãŸãã¯ç¹å®ã®èŠçŽ ïŒã®`lang`屿§ããã䜿çšããŸããèšèªãåçã«å€æŽããå Žåã¯ãæ£ç¢ºãªçºé³ã®ããã«ãã®å±æ§ãé©å®æŽæ°ããŠãã ããã
- æèã®æç¢ºãïŒããæåã§ã¯æç¢ºãªããšããå¥ã®æåã§ã¯ææ§ãããããŸãããæ®éçã«çè§£ãããçšèªã䜿çšããŠãã ãããäŸãã°ããPayment successfulãã¯ãéåžžã«å°ååãããéèçšèªãããäžè¬çã«æç¢ºã§ãã
- äŒéé床ïŒã¹ã¯ãªãŒã³ãªãŒããŒã®ãŠãŒã¶ãŒã¯èªã¿äžãé床ã調æŽã§ããŸãããããªãã®éç¥ã¯å€æ§ãªãŠãŒã¶ãŒãçè§£ã§ãããããé©åºŠãªããŒã¹ã§ååã«æç¢ºã§ããã¹ãã§ãã
6. ã°ã¬ãŒã¹ãã«ãã°ã©ããŒã·ã§ã³ãšåé·æ§
ã©ã€ããªãŒãžã§ã³ã¯åŒ·åã§ãããç¹ã«ã¹ã¯ãªãŒã³ãªãŒããŒã䜿çšããŠããªããŠãŒã¶ãŒããæ¯æŽæè¡ãARIAãå®å šã«ã¯ãµããŒãããŠããªãå¯èœæ§ããããŠãŒã¶ãŒã®ããã«ãåãæ å ±ã«å¯Ÿãã代æ¿ã®éèŠèŠçãªæãããããããã©ãããæ€èšããŠãã ãããäŸãã°ãã©ã€ããªãŒãžã§ã³ã®éç¥ãšäžŠè¡ããŠãè²ã®å€æŽãã¢ã€ã³ã³ãæç¢ºãªããã¹ãã©ãã«ãªã©ã®èŠèŠçãªã€ã³ãžã±ãŒã¿ãŒãååšããããšã確èªããŠãã ããã
7. ãã¹ãããã¹ãããããŠãŸããã¹ã
ã©ã€ããªãŒãžã§ã³ã®åäœã¯ãã¹ã¯ãªãŒã³ãªãŒããŒïŒNVDAãJAWSãVoiceOverãTalkBackïŒãšãã©ãŠã¶ïŒChromeãFirefoxãSafariãEdgeïŒã®ç°ãªãçµã¿åããã«ãã£ãŠç°ãªãå ŽåããããŸããå®éã®æ¯æŽæè¡ãŠãŒã¶ãŒãçµéšè±å¯ãªãã¹ã¿ãŒã«ãã培åºçãªãã¹ãã¯ãéç¥ãæå³ãããšããã«èªèãããããšãä¿èšŒããããã«æãéèŠã§ãã
ããããèœãšã穎ãšãã®åé¿æ¹æ³
åæããã£ãŠããã©ã€ããªãŒãžã§ã³ã¯èª€çšãããæ¯æŽæè¡ãŠãŒã¶ãŒã«ãšã£ãŠãã©ã¹ãã¬ãŒã·ã§ã³ã®ããŸãäœéšã«ã€ãªããããšããããŸãã以äžã¯äžè¬çãªèœãšã穎ã§ãïŒ
1. aria-live="assertive"
ã®èª€çš
æãé »ç¹ãªééãã¯ãéèŠã§ãªãæ å ±ã«`assertive`ã䜿çšããããšã§ããããããããªããïŒããšããã¡ãã»ãŒãžããã€ããŒãªUIã®æŽæ°ã§ãŠãŒã¶ãŒãäžæãããããšã¯ããŠã§ããµã€ããåžžã«ã¹ãããã§ããªãåºåããããã¢ããããããããªãã®ã§ããããã¯éåžžã«åŠšå®³çã§ããããŠãŒã¶ãŒããµã€ããé¢ããåå ã«ãªãåŸãŸãã`assertive`ã¯ãçã«ç·æ¥ã§è¡åãä¿ãæ å ±ã®ããã«åã£ãŠãããŸãããã
2. ã©ã€ããªãŒãžã§ã³ã®éè€
è€æ°ã®`assertive`ã©ã€ããªãŒãžã§ã³ããã£ãããæŽæ°ãé »ç¹ããã`polite`ãªãŒãžã§ã³ããã£ãããããšãæ··ä¹±ãæãéç¥ã®äžååé³ã«ã€ãªããå¯èœæ§ããããŸããäžè¬çãªã¹ããŒã¿ã¹æŽæ°ã«ã¯åäžã®äž»èŠãªã©ã€ããªãŒãžã§ã³ãç®æããç¹å®ã®æèã«å¿ããã©ã€ããªãŒãžã§ã³ïŒãã©ãŒã æ€èšŒã®ããã®`alert`ãªã©ïŒã¯ãæ¬åœã«å¿ èŠãªå Žåã«ã®ã¿äœ¿çšããŠãã ããã
3. aria-live
屿§ã®åçãªè¿œå /åé€
åè¿°ã®ããã«ãèŠçŽ ãã¬ã³ããªã³ã°ãããåŸã«`aria-live`屿§ã倿Žããããšã¯ä¿¡é Œæ§ãäœãå ŽåããããŸããã©ã€ããªãŒãžã§ã³èŠçŽ ã¯ãåæç¶æ ã§ã¯ã³ã³ãã³ããå«ãŸããŠããªããŠããHTMLã«é©åãª`aria-live`ïŒãŸãã¯`role`ïŒå±æ§ãä»ããŠäœæããŠãã ããããã®åŸãå¿ èŠã«å¿ããŠ`textContent`ãæŽæ°ããããåèŠçŽ ã远å /åé€ãããããŸãã
4. åæã³ã³ãã³ãéç¥ã®åé¡
ããŒãžãæåã«èªã¿èŸŒãŸãããšãã«ã©ã€ããªãŒãžã§ã³ã«ã³ã³ãã³ããããå Žåããã®ã³ã³ãã³ãã¯éåžžãåŸã§æç€ºçã«æŽæ°ãããªãéãã倿ŽããšããŠéç¥ãããŸãããã©ã€ããªãŒãžã§ã³ã¯*åçãªæŽæ°*ã®ããã®ãã®ã§ããåæã³ã³ãã³ããéç¥ãããå Žåã¯ããããããŒãžã®ã¡ã€ã³ã³ã³ãã³ããããŒã®äžéšãšããŠéç¥ãããããåŸã®æŽæ°ãã©ã€ããªãŒãžã§ã³ãããªã¬ãŒããããã«ããŠãã ããã
5. äžçäžã§ã®ãã¹ãäžè¶³
Windowsã®NVDAã§å®ç§ã«æ©èœããã©ã€ããªãŒãžã§ã³ããiOSã®VoiceOverãJAWSã§ã¯ç°ãªãåäœããããããããŸãããããã«ãã¹ã¯ãªãŒã³ãªãŒããŒã®èšèªèšå®ãç°ãªããšãçºé³ãçè§£ã«åœ±é¿ãäžããå¯èœæ§ããããŸããäºæããªãåäœãæããããã«ãåžžã«ããŸããŸãªæ¯æŽæè¡ã§ãå¯èœã§ããã°å€æ§ãªèšèªçèæ¯ãæã€ãŠãŒã¶ãŒãšå ±ã«ãã¹ãããŠãã ããã
é«åºŠãªã·ããªãªãšã°ããŒãã«ãªèæ ®äºé
ã·ã³ã°ã«ããŒãžã¢ããªã±ãŒã·ã§ã³ïŒSPAïŒãšã«ãŒãã£ã³ã°
SPAã§ã¯ãåŸæ¥ã®ããŒãžåèªã¿èŸŒã¿ã¯çºçããŸããããŠãŒã¶ãŒãä»®æ³ããŒãžéãç§»åãããšããã¹ã¯ãªãŒã³ãªãŒããŒã¯ãã°ãã°æ°ããããŒãžã¿ã€ãã«ãã¡ã€ã³ã³ã³ãã³ããéç¥ããŸãããããã¯äžè¬çãªã¢ã¯ã»ã·ããªãã£ã®èª²é¡ã§ãããã©ã€ããªãŒãžã§ã³ã¯ãå€ãã®å Žåãã©ãŒã«ã¹ç®¡çãARIAã®`role="main"`ãŸãã¯`role="document"`ãšçµã¿åãããŠããã®ç·©åã«åœ¹ç«ã¡ãŸãã
æŠç¥ïŒã«ãŒãéç¥çšã®ã©ã€ããªãŒãžã§ã³ãäœæããŸããæ°ãããã¥ãŒãèªã¿èŸŒãŸãããããã®ãªãŒãžã§ã³ãæ°ããããŒãžã¿ã€ãã«ãæ°ããã³ã³ãã³ãã®èŠçŽã§æŽæ°ããŸããããã«ããã©ãŒã«ã¹ãããã°ã©ã ã«ãã£ãŠæ°ãããã¥ãŒã®ã¡ã€ã³ã®èŠåºããè«ççãªéå§ç¹ã«ç§»åãããããšã確èªããŠãã ããã
äŸïŒSPAã«ãŒãéç¥ïŒïŒ
<div aria-live="polite" aria-atomic="true" id="route-announcer" class="sr-only"></div>
<!-- ã«ãŒãã£ã³ã°ããžãã¯å
-->
<script>
function navigateTo(pageTitle, mainContentId) {
document.getElementById('route-announcer').textContent = `${pageTitle}ããŒãžã«ç§»åããŸããã`;
// ... æ°ããã³ã³ãã³ããèªã¿èŸŒãããžã㯠...
const mainContent = document.getElementById(mainContentId);
if (mainContent) {
mainContent.setAttribute('tabindex', '-1');
mainContent.focus();
}
}
// 䜿çšäŸïŒ
// navigateTo('補å詳现', 'product-details-content');
</script>
`sr-only`ã¯ã©ã¹ïŒå€ãã®å Žå `position: absolute; left: -9999px;` ãªã©ïŒã¯ãdivãèŠèŠçã«é ããŸãããã¹ã¯ãªãŒã³ãªãŒããŒã«ã¯ã¢ã¯ã»ã¹å¯èœãªãŸãŸã«ããŸãã
ãªã¢ã«ã¿ã€ã æ€èšŒä»ãã®è€éãªãã©ãŒã
ãã©ãŒã ã¯ã©ã€ããªãŒãžã§ã³ã®äž»èŠãªåè£ã§ãããç¹ã«ããŒãžå šäœã®éä¿¡ãªãã«æ€èšŒãå³åº§ã«è¡ãããå Žåã«æå¹ã§ãããŠãŒã¶ãŒãå ¥åããã«ã€ããŠãæå¹æ§ã«é¢ãã峿ã®ãã£ãŒãããã¯ã¯äœ¿ãããããå€§å¹ ã«åäžãããããšãã§ããŸãã
æŠç¥ïŒéèŠã§å³æã®ãšã©ãŒïŒäŸïŒãã¡ãŒã«åœ¢åŒãç¡å¹ã§ããïŒã«ã¯`role="alert"`ã䜿çšããŸããããã»ã©éèŠã§ã¯ãªãããŸãã¯æ å ±æäŸçãªãã£ãŒãããã¯ïŒäŸïŒããã¹ã¯ãŒã匷床ïŒåŒ·ããïŒã«ã¯ã`aria-describedby`ãä»ããŠå ¥åãã£ãŒã«ãã«ãªã³ã¯ããã`role="status"`ãŸãã¯`aria-live="polite"`ãªãŒãžã§ã³ã广çã§ãã
åçãªãœãŒã/ãã£ã«ã¿ãªã³ã°ä»ãã®ããŒã¿ããŒãã«
ãŠãŒã¶ãŒãããŒã¿ããŒãã«ããœãŒããŸãã¯ãã£ã«ã¿ãªã³ã°ãããšãèŠèŠçãªé 眮ãå€ãããŸããã©ã€ããªãŒãžã§ã³ã¯ãæ°ãããœãŒãé åºããã£ã«ã¿ãªã³ã°ãããçµæã®æ°ãéç¥ã§ããŸãã
æŠç¥ïŒãœãŒããŸãã¯ãã£ã«ã¿ãŒæäœã®åŸããã補ååãã§æé ã«ããŒãã«ããœãŒãããŸãããããã100ä»¶äž25ä»¶ã®çµæã衚瀺ããŠããŸãããã®ãããªã¡ãã»ãŒãžã§`role="status"`ãªãŒãžã§ã³ãæŽæ°ããŸãã
ãªã¢ã«ã¿ã€ã éç¥ïŒãã£ããããã¥ãŒã¹ãã£ãŒãïŒ
role="log"
ã§ã«ããŒããããã«ããããã®ã¢ããªã±ãŒã·ã§ã³ã¯ããŠãŒã¶ãŒã«åžžã«ç¢ºèªãæŽæ°ã匷å¶ããããšãªãæ°ããã³ã³ãã³ããéç¥ããããã«ãã©ã€ããªãŒãžã§ã³ããéåžžã«å€§ããªæ©æµãåããŸãã
æŠç¥ïŒäŒè©±åœ¢åŒãŸãã¯æç³»åã®ã³ã³ãã³ãã«ã¯`role="log"`ãå®è£ ããŸããæ°ãã远å ããã°ã®æ«å°Ÿã«è¿œå ãããã³ã³ãããå¿ èŠã«å¿ããŠã¹ã¯ããŒã«äœçœ®ã管çããããšã確èªããŠãã ããã
å€èšèªã³ã³ãã³ããšã¹ã¯ãªãŒã³ãªãŒããŒã®èšèªèšå®
ã°ããŒãã«ãªã¢ããªã±ãŒã·ã§ã³ã§ã¯ãã¹ã¯ãªãŒã³ãªãŒããŒã¯`lang`屿§ã«åºã¥ããŠã³ã³ãã³ããçºé³ããããšããŸããã©ã€ããªãŒãžã§ã³ãç°ãªãèšèªã®ã³ã³ãã³ãã§åçã«æŽæ°ãããå Žåãã©ã€ããªãŒãžã§ã³èŠçŽ ïŒãŸãã¯ãã®ã³ã³ãã³ãïŒã®`lang`屿§ãããã«å¿ããŠæŽæ°ãããããšã確èªããŠãã ããã
äŸïŒ
<div aria-live="polite" id="localized-message">Welcome!</div>
<!-- åŸã§ãã©ã³ã¹èªã®ã³ã³ãã³ãã§æŽæ° -->
<script>
const messageDiv = document.getElementById('localized-message');
messageDiv.setAttribute('lang', 'fr');
messageDiv.textContent = 'Bienvenue !';
</script>
`lang="fr"`ããªããšãè±èªã«èšå®ãããã¹ã¯ãªãŒã³ãªãŒããŒã¯ãBienvenue !ããèãã誀ã£ãŠçºé³ããå¯èœæ§ããããŸãã
ã¢ã©ãŒããšéç¥ã®æåçèæ¯
ã¢ã©ãŒãã®ç·æ¥æ§ã衚çŸã¯ãæåã«ãã£ãŠç°ãªã£ãŠèªèãããå ŽåããããŸããçŽæ¥çã§æå®çãªã¡ãã»ãŒãžã¯ãããå°åã§ã¯åœ¹ç«ã€ãšèŠãªããããããããŸããããå¥ã®å°åã§ã¯éåºŠã«æ»æçãšèŠãªããããããããŸãããç°¡æœãã®å¶çŽã®äžã§ããå¯èœã§ããã°æåçã«é æ ®ããããŒã³ã§`assertive`ãªéç¥ã調æŽããŠãã ããã
ã°ããŒãã«ãªã¢ã¯ã»ã·ããªãã£ã®ããã®ã©ã€ããªãŒãžã§ã³ã®ãã¹ã
ãã¹ãã¯åãªãæçµã¹ãããã§ã¯ãªããç¶ç¶çãªããã»ã¹ã§ããã©ã€ããªãŒãžã§ã³ã«ã€ããŠã¯ããã®åäœãã¹ã¯ãªãŒã³ãªãŒããŒãšãã©ãŠã¶ã®çµã¿åããã«å€§ããäŸåãããããç¹ã«éèŠã§ãã
1. ã¹ã¯ãªãŒã³ãªãŒããŒã«ããæåãã¹ã
ãããæãéèŠãªã¹ãããã§ããã¿ãŒã²ãããªãŒãã£ãšã³ã¹ãäžè¬çã«äœ¿çšããã¹ã¯ãªãŒã³ãªãŒããŒã䜿çšããŠãã ãããã°ããŒãã«ãªæèã§ã¯ãããã«ã¯ä»¥äžãå«ãŸããå ŽåããããŸãïŒ
- NVDA (NonVisual Desktop Access): ç¡æããªãŒãã³ãœãŒã¹ã§ãWindowsäžã§äžççã«åºã䜿çšãããŠããŸãã
- JAWS (Job Access With Speech): åçšã§åŒ·åãWindowsã§éåžžã«äººæ°ããããŸãã
- VoiceOver: Appleã®macOSããã³iOSããã€ã¹ã«çµã¿èŸŒãŸããŠããŸãã
- TalkBack: Androidããã€ã¹ã«çµã¿èŸŒãŸããŠããŸãã
- ãã¬ãŒã¿ãŒ: Windowsã«çµã¿èŸŒãŸããŠããŸãïŒNVDA/JAWSã»ã©æ©èœã¯è±å¯ã§ã¯ãããŸããããåºæ¬çãªãã§ãã¯ã«ã¯é©ããŠããŸãïŒã
ãã¹ãã·ããªãªïŒ
- `polite`ãªéç¥ãé©åãªééã§çºçããããšã確èªããŸãã
- `assertive`ãªéç¥ãå³åº§ã«æ£ããå²ã蟌ãããšã確èªããŸãã
- é¢é£ããã³ã³ãã³ãã®ã¿ãéç¥ãããããšã確èªããŸãïŒ`aria-atomic`ãš`aria-relevant`ã䜿çšïŒã
- ã¹ã¯ãªãŒã³ãªãŒããŒãä»ã®ã³ã³ãã³ããèªã¿äžããŠããç¶æ ã§ãã¹ãããã©ã€ããªãŒãžã§ã³ãããã§ãéç¥ããããã確èªããŸãã
- é ããããã¯ãŒã¯ç¶æ³ãè€éãªãŠãŒã¶ãŒæäœãã·ãã¥ã¬ãŒãããŠãéç¥ãèŠéããããã誀ã£ãŠãã¥ãŒã«å ¥ã£ããããªããã確èªããŸãã
- ã¹ã¯ãªãŒã³ãªãŒããŒã®ç°ãªãèšèªèšå®ã§ãã¹ãããã©ã€ããªãŒãžã§ã³ã³ã³ãã³ãã®çºé³ã確èªããŸãã
2. èªåã¢ã¯ã»ã·ããªãã£ããŒã«
Google Lighthouseãaxe-coreãWaveãªã©ã®ããŒã«ã¯ãäžè¬çãªARIAå®è£ ãšã©ãŒãç¹å®ããã®ã«åœ¹ç«ã¡ãŸãããã©ã€ããªãŒãžã§ã³ã®*åäœ*ãå®å šã«æ€èšŒããããšã¯ã§ããŸããããããã¯æ§é çãªåé¡ïŒäŸïŒç¡å¹ãªARIA屿§ïŒãæããã®ã«ã¯é©ããŠããŸãããéç¥ãå®éã«çºçãããããŸãã¯æ£ãã衚çŸãããŠããããæ€èšŒããã«ã¯äžååã§ãã
3. 倿§ãªå人ãšã®ãŠãŒã¶ãŒãã¹ã
究極ã®ãã¹ãã¯ãå®éã®ãŠãŒã¶ãŒãç¹ã«æ¥åžžçã«æ¯æŽæè¡ã䜿çšããŠãã人ã ãšã®ãã¹ãã§ããç°ãªãå°åãèšèªçèæ¯ãæã€ãŠãŒã¶ãŒãå·»ã蟌ã¿ãããªãã®ã©ã€ããªãŒãžã§ã³ãã©ã®ããã«èªèããããããæ¬åœã«äœ¿ãããããåäžãããŠãããã«ã€ããŠã®è²ŽéãªæŽå¯ãåŸãŠãã ããã
4. ã¯ãã¹ãã©ãŠã¶ããã³ã¯ãã¹ããã€ã¹ãã¹ã
äž»èŠãªãã©ãŠã¶ïŒChromeãFirefoxãSafariãEdgeïŒããã³ããã€ã¹ïŒãã¹ã¯ããããã¢ãã€ã«ïŒéã§ã©ã€ããªãŒãžã§ã³ãäžè²«ããŠæ©èœããããšã確èªããŠãã ãããäžéšã®ãã©ãŠã¶/ã¹ã¯ãªãŒã³ãªãŒããŒã®çµã¿åããã§ã¯ãã©ã€ããªãŒãžã§ã³ã®æŽæ°ã®åŠçæ¹æ³ã«åŸ®åŠãªéããããå ŽåããããŸãã
ã©ã€ããªãŒãžã§ã³ãšãŠã§ãã¢ã¯ã»ã·ããªãã£ã®æªæ¥
WAI-ARIA仿§ã¯ç¶ç¶çã«é²åããŠãããæ°ããããŒãžã§ã³ã§ã¯æ°ããªãŠã§ããã¿ãŒã³ã«å¯Ÿå¿ããæ¢åã®ãã®ãæ¹åããŠããŸãããŠã§ãéçºãã¬ãŒã ã¯ãŒã¯ãããæŽç·Žãããã«ã€ããŠãã¢ã¯ã»ã·ããªãã£æ©èœãçµ±åãããæã«ã¯ARIA屿§ã®çŽæ¥çãªäœ¿çšãæœè±¡åããããšããããŸããããããã©ã€ããªãŒãžã§ã³ã®æ ¹åºã«ããååãçè§£ããããšã¯ãéçºè ãç¹å®ã®ããŒãºã«åãããŠãã©ãã«ã·ã¥ãŒãã£ã³ã°ãã«ã¹ã¿ãã€ãºãè¡ãäžã§ãåŒãç¶ãéèŠã§ãã
ããå æ¬çãªãŠã§ããžã®æšé²åã¯ããŸããŸã匷ãŸãã°ããã§ããäžçäžã®æ¿åºããã峿 Œãªã¢ã¯ã»ã·ããªãã£æ³ãå¶å®ããŠãããäŒæ¥ã¯ãã¹ãŠã®æœåšçãªãŠãŒã¶ãŒã«ãªãŒãããããšã®èšãç¥ããªã䟡å€ãèªèããŠããŸããã©ã€ããªãŒãžã§ã³ã¯ããã®åãçµã¿ã«ãããåºæ¬çãªããŒã«ã§ãããããè±ãã§ã€ã³ã¿ã©ã¯ãã£ããªäœéšããã©ãã«ããŠã誰ã«ã§ãã¢ã¯ã»ã¹å¯èœã«ããããšãå¯èœã«ããŸãã
çµè«
åçã³ã³ãã³ãã¯çŸä»£ã®ãŠã§ãã®å¿èéšã§ãããã¢ã¯ã»ã·ããªãã£ãžã®æ éãªé æ ®ããªããã°ãäžçã®ãªã³ã©ã€ã³ã³ãã¥ããã£ã®å€§éšåãæé€ããå¯èœæ§ããããŸããARIAã©ã€ããªãŒãžã§ã³ã¯ããªã¢ã«ã¿ã€ã ã®æŽæ°ãäžéšã®ãŠãŒã¶ãŒã«èŠãããã ãã§ãªããã¹ã¯ãªãŒã³ãªãŒããŒããã®ä»ã®æ¯æŽæè¡ã«é Œã人ã ãå«ããã¹ãŠã®äººã«éç¥ãããçè§£ãããããšãä¿èšŒããããã®ãå ç¢ã§æšæºåãããã¡ã«ããºã ãæäŸããŸãã
`aria-live`ïŒãã®`polite`ããã³`assertive`å€ãšãšãã«ïŒãè³¢æã«é©çšãã`status`ã`alert`ã®ãããªã»ãã³ãã£ãã¯ãªããŒã«ã掻çšãã`aria-atomic`ã`aria-relevant`ã§éç¥ã现å¿ã®æ³šæãæã£ãŠå¶åŸ¡ããããšã§ãéçºè ã¯èŠèŠçã«é åçãªã ãã§ãªããæ·±ãå æ¬çãªãŠã§ãäœéšãåµé ããããšãã§ããŸãã广çãªå®è£ ã¯ãåã«å±æ§ã远å ããã ãã«ãšã©ãŸããªãããšãå¿ããªãã§ãã ãããããã«ã¯ããŠãŒã¶ãŒã®ããŒãºã®æ·±ãçè§£ãæ éãªèšç»ãæç¢ºãªã¡ãã»ãŒãžã³ã°ããããŠå€æ§ãªãŠãŒã¶ãŒã³ã³ããã¹ããšæ¯æŽæè¡ã«ããã峿 Œãªãã¹ããå¿ èŠã§ãã
ARIAã©ã€ããªãŒãžã§ã³ãåãå ¥ããããšã¯ãåãªãã³ã³ãã©ã€ã¢ã³ã¹ã®åé¡ã§ã¯ãããŸãããããã¯ãçã«äººé¡ã«å¥ä»ãããŠã§ããæ§ç¯ããå°çäžã®èœåãå Žæã«é¢ãããã誰ããæ å ±ã察話ã«å ¬å¹³ã«ã¢ã¯ã»ã¹ã§ããç°å¢ãè²ãããšã§ããç§ãã¡ã®åçãªãŠã§ããããã¹ãŠã®äººã«ãšã£ãŠçã«ãã€ãããã¯ãªãã®ã«ããããšã«ã³ãããããŸãããã